using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("DeckRuleset")]
	public class DeckRuleset : MonoClass
	{
		public enum DeckRulesetConstant
		{
			UnknownRuleset,
			WildRuleset,
			StandardRuleset
		}

		public int m_id => method_2<int>("m_id");

		public List<DeckRule> m_rules => method_3<Class271<DeckRule>>("m_rules")?.method_25();

		public static DeckRuleset s_standardRuleset => MonoClass.smethod_7<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "s_standardRuleset");

		public static DeckRuleset s_wildRuleset => MonoClass.smethod_7<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "s_wildRuleset");

		public int Id => method_11<int>("get_Id", Array.Empty<object>());

		public List<DeckRule> Rules => method_14<Class271<DeckRule>>("get_Rules", Array.Empty<object>())?.method_25();

		public DeckRuleset(IntPtr address, string className)
			: base(address, className)
		{
		}

		public DeckRuleset(IntPtr address)
			: this(address, "DeckRuleset")
		{
		}

		public static DeckRuleset GetDeckRuleset(int id)
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "GetDeckRuleset", new object[1] { id });
		}

		public static DeckRuleset GetDeckRulesetFromDBF(int id)
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "GetDeckRulesetFromDBF", new object[1] { id });
		}

		public static DeckRuleset GetStandardRuleset()
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "GetStandardRuleset", Array.Empty<object>());
		}

		public static DeckRuleset BuildStandardRuleset()
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "BuildStandardRuleset", Array.Empty<object>());
		}

		public static DeckRuleset GetWildRuleset()
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "GetWildRuleset", Array.Empty<object>());
		}

		public static DeckRuleset BuildWildRuleset()
		{
			return MonoClass.smethod_15<DeckRuleset>(TritonHs.MainAssemblyPath, "", "DeckRuleset", "BuildWildRuleset", Array.Empty<object>());
		}

		public bool Filter(EntityDef entity)
		{
			return method_11<bool>("Filter", new object[1] { entity });
		}

		public bool IsDeckValid(CollectionDeck deck)
		{
			return method_10<bool>("IsDeckValid", new Class276.Enum20[1] { Class276.Enum20.Class }, new object[1] { deck });
		}

		public int GetDeckSize()
		{
			return method_11<int>("GetDeckSize", Array.Empty<object>());
		}

		public bool HasOwnershipOrRotatedRule()
		{
			return method_11<bool>("HasOwnershipOrRotatedRule", Array.Empty<object>());
		}

		public int GetMaxCopiesOfCardAllowed(EntityDef entity)
		{
			return method_11<int>("GetMaxCopiesOfCardAllowed", new object[1] { entity });
		}
	}
}
